package com.zykj.template;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 00
 * @since 2019/1/3-11:00
 */
public abstract class CaffeineBeverageWithHook {

    //TODO 模板方法 添加钩子 功能
    final void templateMethod() {
        boilWater();
        brew();
        pourInCup();
        //TODO 如果算法中某个 算法是可选的， 就使用钩子控制
        if(hook()) {
            addCondiments();
        }
    }

    abstract void brew();
    abstract void addCondiments();

    void boilWater() {
        System.out.println("煮沸开水...");
    }
    void pourInCup() {
        System.out.println("倒入杯中...");
    }

    /**
     * @Comments:  <模板方法， 添加钩子>
     * @author zhoulj(周利军) [1217102780@qq.com]
     * @since 2019/1/3-11:31
     * @param
     * @return boolean
    */
    public boolean hook() {
        return true;
    }
}
